package com.cn.ssm.utils.files;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.nio.file.Files;

/**
 * @ClassName: OprFiles
 * @Description: 文件操作类
 * @author Administrator
 * @date 2018年12月27日
 *
 */

public class OprFiles {

	/**
	 * @Title: copyFiles @Description: 复制文件到指定目录下 @param @param
	 *         filepath @param @param targetfile 参数 @return void 返回类型 @throws
	 */

	public void copyFiles(String filepath, String targetfile) {

	}

	/**
	 * @Title: copyFileUsingFileStreams 
	 * @Description: 复制文件方法1：使用文件流复制文件
	 * @param  source 源文件
	 * @param  dest 目标文件 目标文件 @param @throws IOException 参数 @return void
	 *            返回类型 @throws
	 */

	public static void copyFileUsingFileStreams(File source, File dest) throws IOException {
		InputStream input = null;
		OutputStream output = null;

		// 判断源文件是否存在
		if (!source.exists()) {
			System.out.println("源文件不存在！");
			return;
		}

		// 判断源文件所在目录是否存在
		if (!dest.getParentFile().isDirectory()) {
			System.out.println("目标文件目录不存在！");
			// dest.mkdirs();
			dest.getParentFile().mkdir();
		}

		try {
			input = new FileInputStream(source);
			output = new FileOutputStream(dest);
			byte[] buf = new byte[1024];
			int bytesRead;
			while ((bytesRead = input.read(buf)) > 0) {
				output.write(buf, 0, bytesRead);
			}
		} catch (Exception e) {
			throw new IOException();
		} finally {
			if (input != null) {
				input.close();
			}
			if (output != null) {
				output.close();
			}
		}
	}
	
	
      
	
    /**
    * @Title: copyFileUsingFileChannels
    * @Description:复制文件方法2：使用管道文件流复制文件 速度快
    * @param @param source
    * @param @param dest
    * @param @throws IOException    参数
    * @return void    返回类型
    * @throws
    */
	    
	private static void copyFileUsingFileChannels(File source, File dest) throws IOException {
		FileChannel inputChannel = null;
		FileChannel outputChannel = null;
		
		// 判断源文件是否存在
		if (!source.exists()) {
			System.out.println("源文件不存在！");
			return;
		}

		// 判断源文件所在目录是否存在
		if (!dest.getParentFile().isDirectory()) {
			System.out.println("目标文件目录不存在！");
			// dest.mkdirs();
			dest.getParentFile().mkdir();
		}
		try {
			inputChannel = new FileInputStream(source).getChannel();
			outputChannel = new FileOutputStream(dest).getChannel();
			outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
		} finally {
			if (inputChannel != null) {
				inputChannel.close();
			}
			if (outputChannel != null) {
				outputChannel.close();
			} 
		}
	}

	   

	public static void main(String[] args) {
		File f1 = new File("C:/Users/Administrator/Desktop/wei/加班单/魏军元加班申请2018-06-06.xls");
		File f2 = new File("C:/Users/Administrator/Desktop/wei/加班单/复制/魏军元加班申请2018-06-06.xls");
		
		try {
			Files.copy(f1.toPath(),f2.toPath());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

